package plugins.videoPlayer;
//Lire des fichiers multimédia avec le Java Media Player.
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.media.*;

/**
 * represente la creation du plugin de lecture de fichier video
 * @author Amine HALLILI amine.hallili@gmail.com
 *
 */
public class PlayVideo extends JFrame {
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Player lecteur;
	private File fichier;

	public PlayVideo(File f)
	{
		   super( "Démonstration du Java Media Player" );
		   JButton ouvrirFichier = new JButton( "Ouvrir le fichier à lire" );
		      ouvrirFichier.addActionListener(
		         new ActionListener() {
		            public void actionPerformed( ActionEvent e )
		            {
		               ouvrirFichier();
		               creerLecteur();
		            }
		         }
		      );
		      getContentPane().add( ouvrirFichier, BorderLayout.NORTH );
	
		      setSize( 300, 300 );
		      setVisible(true);
		   this.fichier = f;
		   creerLecteur();
	}
	public PlayVideo()
	{
	   
	
	   JButton ouvrirFichier = new JButton( "Ouvrir le fichier à lire" );
	   ouvrirFichier.addActionListener(
	      new ActionListener() {
	         public void actionPerformed( ActionEvent e )
	         {
	            ouvrirFichier();
	            creerLecteur();
	         }
	      }
	   );
	   getContentPane().add( ouvrirFichier, BorderLayout.NORTH );
	
	   setSize( 300, 300 );
	   setVisible(true);
	}

	private void ouvrirFichier()
	{      
	   JFileChooser choixDeFichier = new JFileChooser();
	
	   choixDeFichier.setFileSelectionMode(
	      JFileChooser.FILES_ONLY );
	   int resultat = choixDeFichier.showOpenDialog( this );
	
	   // Utilisateur clique sur le bouton Annuler dans le dialogue.
	   if ( resultat == JFileChooser.CANCEL_OPTION )
	      fichier = null;
	   else
	      fichier = choixDeFichier.getSelectedFile();
	}

	private void creerLecteur()
	{
	   if ( fichier == null )
	      return;
	
	   retirerLecteurPrecedent();
	
	   try {
	      // Creer un nouveau lecteur et ajouter un écouteur.
	      lecteur = Manager.createPlayer( fichier.toURI().toURL() );
	      lecteur.addControllerListener( new GestionnaireEvenement() );
	      lecteur.start();  // Démarrage du lecteur.
	   }
	   catch ( Exception e ){
	      JOptionPane.showMessageDialog( this,
	         "Fichier ou emplacement invalide", "Chargement du fichier"+
	          " erroné",JOptionPane.ERROR_MESSAGE );
	   }
	}

	private void retirerLecteurPrecedent()
	{
	   if ( lecteur == null )
	      return;
	
	   lecteur.close();
	
	   Component visuel = lecteur.getVisualComponent();
	   Component controle = lecteur.getControlPanelComponent();
	
	   Container c = getContentPane();
	  
	   if ( visuel != null )
	      c.remove( visuel );
	
	   if ( controle != null )
	      c.remove( controle );
	}
	
	public static void main(String args[])
	{
		PlayVideo application = new PlayVideo();
	
	   application.addWindowListener(
	      new WindowAdapter() {
	         public void windowClosing( WindowEvent e )
	         {
	            System.exit(0);
	         }
	      }
	   );
	}

	// Classe interne pour gérer les événements du lecteur multimédia.
	private class GestionnaireEvenement implements ControllerListener {
	   public void controllerUpdate( ControllerEvent e ) {
	      if ( e instanceof RealizeCompleteEvent ) {
	         Container c = getContentPane();
	      
	         // Charger les composants visuel et contrôles s’ils existent.
	         Component composantVisuel =
	            lecteur.getVisualComponent();
	
	         if ( composantVisuel != null )
	            c.add( composantVisuel, BorderLayout.CENTER );
	
	         Component composantControles =
	            lecteur.getControlPanelComponent();
	
	         if ( composantControles != null )
	            c.add( composantControles, BorderLayout.SOUTH );
	
	         c.doLayout();
	      }
	   }
	}
}